iT邦幫忙

2023 iThome 鐵人賽

DAY 9
1
自我挑戰組

SRE 照書養系列 第 9

Day 9 - SRE 照書養:資源部署

  • 分享至 

  • xImage
  •  

嗨嗨大家好!這週是漫長的一週!今天我們要繼續 SRE 方法論的第六條:資源部署,這裡是今天讀的原文出處:Introduction,那我們開始囉!

書中提到資源部署的代價是昂貴的,所以操作時務必謹慎小心。現今有許多工具能夠輔助我們進行相對穩定的部署。

復盤時間

目前的部署流程會像下圖:

https://ithelp.ithome.com.tw/upload/images/20230923/20105176nkYRwpjpoZ.png

這裡我們先著重看 cloudbuild.yaml,目前透過 Cloud Build 的 yaml 檔去部署:

  1. 編譯 Java 專案:使用 Gradle 7.6 和 Java 環境編譯專案。該步驟會執行 gradle build指令。
  2. 架設 Docker 映像檔:使用 Docker 建立映像檔,並將其標記為專案 ID、儲存庫名稱和容器名稱的組合,後面附上Git提交的SHA值。這個步驟等待前面的 Gradle build 完成。
  3. 推送 Docker 映像檔:將剛剛建立的 Docker 映像檔推送到 Google Cloud Artifact Registry 。這也同樣等待前面的 Docker build 完成。
  4. cdk8s 建立:在 Node.js 18 環境中,執行bash shell 指令,先執行 npm install 安裝必要的程式庫,然後執行 npm run build 進行建構,並將結果複製到 /workspace/dist 目錄下。最後列出該目錹下所有內容並列印 .yaml 檔案的內容。這個步驟也等待 Docker build 完成。
  5. 更新 GKE(Google Kubernetes Engine):使用 kubectl 指令將剛剛建立的 cdk8s yaml 檔案部署到指定的 Kubernetes 集群中。這個步驟等待cdk8s build 步驟完成。
timeout: 1800s
steps:
- name: gradle:7.6-jdk17
  entrypoint: gradle
  args: ['build']
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', '${_CI_REGISTRY_IMAGE}/${PROJECT_ID}/${_CI_REGISTRY_IMAGE_NAME}/${_CONTAINERNAME}:$COMMIT_SHA', '--build-arg=ENVIRONMENT=${_NAMESPACE}','.']
  id: 'build-gar'
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', '${_CI_REGISTRY_IMAGE}/${PROJECT_ID}/${_CI_REGISTRY_IMAGE_NAME}/${_CONTAINERNAME}:$COMMIT_SHA']
  id: 'push-gar'
  waitFor:
  - 'build-gar'
- name: node:18
  entrypoint: bash
  id: build-cdk8s
  dir: cdk8s
  args: ["-c", "npm install && npm run build && cp -r dist /workspace/dist && ls /workspace/dist && cat /workspace/dist/*.yaml"]
  env:
  - 'NAMESPACE=$_NAMESPACE'
  - 'CONTAINERNAME=$_CONTAINERNAME'
  - 'CI_COMMIT_SHA=$COMMIT_SHA'
  - 'NODE_ENV=$_NODE_ENV'
  waitFor: 
    - 'build-gar'
- name: 'gcr.io/cloud-builders/kubectl'
  args: ['apply', '-f', '/workspace/dist', '--namespace=${_NAMESPACE}', '--record']
  id: 'update-gke'
  env:
  - 'CLOUDSDK_COMPUTE_ZONE=${_ZONE}'
  - 'CLOUDSDK_CONTAINER_CLUSTER=${_CLUSTER}'
  waitFor:
    - 'build-cdk8s'

後記

今天主要復盤了工作中 Cloud Build 的部署方式,透過流水線的設置,除了部署的穩定度提高很多,也讓開發人員能夠安心地持續交付。接下來的內容是「效率與性能」!同時奔向我們第一章的終結!週日見!


上一篇
Day 8 - SRE 照書養:需求預測和容量規劃
下一篇
Day 10 - SRE 照書養:效率與性能
系列文
SRE 照書養30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言